# -*- coding: utf-8 -*-
"""color -  module for user-friendly generation of HTML color codes
            using color names or rgb triplets and an optional alpha value"""


class ColorError(Exception):
    """Eccezione generica per il modulo colore"""
    pass


def name(n,a=255):
    """Ritorna il codice corrispondente al colore con nome n"""
    if a<0 or a>255:
        raise ColorError("Invalid alpha value: %d" % a)
    n = n.lower()
    if n not in Color.hexcode.keys():
        raise ColorError("Unknown color name: %s" % n)
    c = Color.hexcode[n]
    return "#" + hex(a+256)[-2:] + c
               
               
def rgb(r,g,b,a=255):
    """Ritorna il codice corrispondente alle componenti r,g,b"""
    if a<0 or a>255:
        raise ColorError("Invalid alpha value: %d" % a)
    if r<0 or r>255:
        raise ColorError("Invalid rgb value: %d" % r)
    if g<0 or g>255:
        raise ColorError("Invalid rgb value: %d" % g)
    if b<0 or b>255:
        raise ColorError("Invalid rgb value: %d" % b)
    return "#" + hex(a+256)[-2:] + hex(r+256)[-2:] + hex(g+256)[-2:] + hex(b+256)[-2:]

class Color:
    """Classe contenente il dizionario colorname->hexcode"""

    small_hexcode = {
                     "red":"FF0000", "white":"FFFFFF",
                     "cyan":"00FFFF", "silver":"C0C0C0",
                     "blue":"0000FF", "grey":"808080",
                     "darkblue":"0000A0", "black":"000000",
                     "lightblue":"ADD8E6", "orange":"FFA500",
                     "purple":"800080", "brown":"A52A2A",
                     "yellow":"FFFF00", "maroon":"800000",
                     "lime":"00FF00", "green":"008000",
                     "fuchsia":"FF00FF", "olive":"808000"}

    hexcode = dict(
      aliceblue = "f0f8ff",
      antiquewhite = "faebd7",
      aqua = "00ffff",
      aquamarine = "7fffd4",
      azure = "f0ffff",
      beige = "f5f5dc",
      bisque = "ffe4c4",
      black = "000000",
      blanchedalmond = "ffebcd",
      blue = "0000ff",
      blueviolet = "8a2be2",
      brown = "a52a2a",
      burlywood = "deb887",
      cadetblue = "5f9ea0",
      chartreuse = "7fff00",
      chocolate = "d2691e",
      coral = "ff7f50",
      cornflowerblue = "6495ed",
      cornsilk = "fff8dc",
      crimson = "dc143c",
      cyan = "00ffff",
      darkblue = "00008b",
      darkcyan = "008b8b",
      darkgoldenrod = "b8860b",
      darkgray = "a9a9a9",
      darkgreen = "006400",
      darkkhaki = "bdb76b",
      darkmagenta = "8b008b",
      darkolivegreen = "556b2f",
      darkorange = "ff8c00",
      darkorchid = "9932cc",
      darkred = "8b0000",
      darksalmon = "e9967a",
      darkseagreen = "8fbc8f",
      darkslateblue = "483d8b",
      darkslategray = "2f4f4f",
      darkturquoise = "00ced1",
      darkviolet = "9400d3",
      deeppink = "ff1493",
      deepskyblue = "00bfff",
      dimgray = "696969",
      dodgerblue = "1e90ff",
      firebrick = "b22222",
      floralwhite = "fffaf0",
      forestgreen = "228b22",
      fuchsia = "ff00ff",
      gainsboro = "dcdcdc",
      ghostwhite = "f8f8ff",
      gold = "ffd700",
      goldenrod = "daa520",
      gray = "808080",
      green = "008000",
      greenyellow = "adff2f",
      honeydew = "f0fff0",
      hotpink = "ff69b4",
      indianred = "cd5c5c",
      indigo = "4b0082",
      ivory = "fffff0",
      khaki = "f0e68c",
      lavender = "e6e6fa",
      lavenderblush = "fff0f5",
      lawngreen = "7cfc00",
      lemonchiffon = "fffacd",
      lightblue = "add8e6",
      lightcoral = "f08080",
      lightcyan = "e0ffff",
      lightgoldenrodyellow = "fafad2",
      lightgray = "d3d3d3",
      lightgreen = "90ee90",
      lightpink = "ffb6c1",
      lightsalmon = "ffa07a",
      lightseagreen = "20b2aa",
      lightskyblue = "87cefa",
      lightslategray = "778899",
      lightsteelblue = "b0c4de",
      lightyellow = "ffffe0",
      lime = "00ff00",
      limegreen = "32cd32",
      linen = "faf0e6",
      magenta = "ff00ff",
      maroon = "800000",
      mediumaquamarine = "66cdaa",
      mediumblue = "0000cd",
      mediumorchid = "ba55d3",
      mediumpurple = "9370db",
      mediumseagreen = "3cb371",
      mediumslateblue = "7b68ee",
      mediumspringgreen = "00fa9a",
      mediumturquoise = "48d1cc",
      mediumvioletred = "c71585",
      midnightblue = "191970",
      mintcream = "f5fffa",
      mistyrose = "ffe4e1",
      moccasin = "ffe4b5",
      navajowhite = "ffdead",
      navy = "000080",
      oldlace = "fdf5e6",
      olive = "808000",
      olivedrab = "6b8e23",
      orange = "ffa500",
      orangered = "ff4500",
      orchid = "da70d6",
      palegoldenrod = "eee8aa",
      palegreen = "98fb98",
      paleturquoise = "afeeee",
      palevioletred = "db7093",
      papayawhip = "ffefd5",
      peachpuff = "ffdab9",
      peru = "cd853f",
      pink = "ffc0cb",
      plum = "dda0dd",
      powderblue = "b0e0e6",
      purple = "800080",
      red = "ff0000",
      rosybrown = "bc8f8f",
      royalblue = "4169e1",
      saddlebrown = "8b4513",
      salmon = "fa8072",
      sandybrown = "f4a460",
      seagreen = "2e8b57",
      seashell = "fff5ee",
      sienna = "a0522d",
      silver = "c0c0c0",
      skyblue = "87ceeb",
      slateblue = "6a5acd",
      slategray = "708090",
      snow = "fffafa",
      springgreen = "00ff7f",
      steelblue = "4682b4",
      tan = "d2b48c",
      teal = "008080",
      thistle = "d8bfd8",
      tomato = "ff6347",
      turquoise = "40e0d0",
      violet = "ee82ee",
      wheat = "f5deb3",
      white = "ffffff",
      whitesmoke = "f5f5f5",
      yellow = "ffff00",
      yellowgreen = "9acd32")